package mian;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Random;
import java.util.concurrent.SynchronousQueue;

import pojo.Student;
import service.IStudentService;
import service.imol.StudentSreviceimpl;
import util.StaticUtil;

public class StuMain
{
	/*在此处直接调用对象*/
	private IStudentService stubentService = new StudentSreviceimpl();
	
	public static void main(String[] args)
	{
		System.out.println("==");
		StuMain stuMain = new StuMain();
		stuMain.start();
	}

	private void start()
	{
		/*连接一个管子查到键盘上*/
		System.out.println("=欢迎使用=");
		BufferedReader br = null;
		try
		{
			br= new BufferedReader(new InputStreamReader(System.in ,"utf-8"));
			/*存储用户输入的内容*/
			String lien = "";
			while(true)
			{
				System.out.println("温馨提示 输入n结束   输入h 查看帮助文档");
				/*等待用户输入*/
				lien= br.readLine();
				if("n".equalsIgnoreCase(lien))
				{
					System.out.println("=谢谢使用,欢迎下次光临=");
					break ;
				}else if("h".equalsIgnoreCase(lien)) 
				{
					/*菜单介绍*/
					help();
				}else if("1".equalsIgnoreCase(lien))
				{
					/*查找所有学生*/
					this.select();
				}else if("2".equalsIgnoreCase(lien))
				{
					/*添加新的学生*/
					this.insert(br);
				}else if("3".equalsIgnoreCase(lien))
				{
					/*修改学生*/
					this.update(br);
				}else if("4".equalsIgnoreCase(lien))
				{
					/*删除学生*/
					this.delete(br);
				}else if("5".equalsIgnoreCase(lien))
				{
					/*随机点名*/
					this.random();
				}else if("6".equalsIgnoreCase(lien))
				{
					/*保存的方法*/
					this.save();
				}else if("7".equalsIgnoreCase(lien))
				{
					/*查询一个学生的信息*/
					this.selectOne(br);
				}else
				{
					System.out.println("=您输入的有误,请参照菜单重新输入=");
					/*菜单*/
					help();
				}
			}
		}catch (IOException e)
		{
			e.printStackTrace();
		}finally
		{
			try
			{
				if(br !=null)
				{
					br.close();
					br = null ;
				}
			} catch (IOException e)
			{
				e.printStackTrace();
			}
		}
	}
	/*上课学生随机点名*/
	private void random()
	{
		Random rand = new Random();
		int coun = 1 ;
		while(true)
		{
			int randInt = rand.nextInt(StaticUtil.getCount()) + 1;
			System.out.println("==中奖学号==" + randInt);
			/*查询当前容器中有没有此号码对应的学号*/
			Student student = this.stubentService.SelectOneStudent(randInt);
			if(student != null )
			{
				/*对应当前id*/
				System.out.println("=恭喜="+student.listStr());
				break;
			}else
			{
				System.out.println("=抽空了,再来一次=");
			}
			coun ++ ;
		}
	}

	/*删除学生 是根据学号删除*/
	private void delete(BufferedReader br)
	{
		System.out.println("=请输入学号(数字)=");
		try
		{
			String line = br.readLine();
			Student sthdent = null ;
			int id = Integer.valueOf(line);
			sthdent = this.stubentService.SelectOneStudent(id);
			if(sthdent !=null)
			{
				System.out.println("=确定要删除吗(y继续删除n返回)=");
				line = br.readLine();
				if("y".equalsIgnoreCase(line))
				{
					/*当输入正确的时候才能执行到这一步*/
					this.stubentService.deleteOneStudent(id);
					System.out.println("=已经成功移除请确认=");
				}
			}
		} catch (IOException e)
		{
			e.printStackTrace();
		}
	}

	/*查询一个学生的信息*/
	private void selectOne(BufferedReader br)
	{
		while(true)
		{
			System.out.println("=请您输入学号(数字)=或者按n直接停止=");
			try
			{
				String line = br.readLine();
				if("n".equalsIgnoreCase(line))
				{
					break;
				}
				int id = Integer.valueOf(line);
				this.stubentService.SelectOneStudent(id);
			} catch (IOException e)
			{
				e.printStackTrace();
			}
			
		}
	}

	/*更新一个学生的信息*/
	private void update(BufferedReader br)
	{
		System.out.println("=请您输入学号=");
		/*提示用户输入的信息*/
		try
		{
			String line = br.readLine();
			Student student = null ;
			int id = Integer.valueOf(line);
			/*根据用户输入的学号*/
			student = this.stubentService.SelectOneStudent(id);
			if(student == null)
			{
				/*学号不存在*/
				return;
			}
			System.out.println("=按照以下格式输入:(姓名;年龄;性别(0男/1女);语文;数学;英文)=");
			/*用户输入的信息*/
			String  ser= "";
			/*判断性别*/
			if(student.isSex())
			{
				ser = "0";
			}else
			{
				ser= "1";
			}
			line = br.readLine();
			System.out.println(""+line);
			String [] lines = line.split(";");
			if(lines.length !=6)
			{
				System.out.println("=输入的格式不正确=");
				return ;
			}
			/*将格式化的字符串 封装成学生的对象*/
			student.setName(lines[0]);
			/*年龄是int类型需要转型*/
			student.setAge(Integer.valueOf(lines[1]));
			/*性输入 0 是男  1 是女*/
			if("0".equalsIgnoreCase(lines[2]))
			{
				student.setSex(true);
			}else if("1".equalsIgnoreCase(lines[2]))
			{
				student.setSex(false);
			}else
			{
				/*其他输入都为错误*/
				System.out.println("=输入有误请按照格式填写=");
				return ;
			}
			student.setChinese(Double.valueOf(lines[3]));
			student.setMath(Double.valueOf(lines[4]));
			student.setEnglish(Double.valueOf(lines[5]));
			
			student.setUpdateTime(new Date());
			System.out.println("=处理后的学生信息="+student);
			id= this.stubentService.updateOneStudent(student);
			System.out.println("学生信息跟新后:"+student+"学号:"+id);
		} catch (IOException e)
		{
			e.printStackTrace();
		}
	}

	/*保存学生的入学信息*/
	private void save()
	{
		this.stubentService.saveFileStudent();
	}

	/*查询所有学生*/
	private void select()
	{
		this.stubentService.selectStudent();
	}

	/*增加学生
	 * */
	private void insert(BufferedReader br)
	{
		System.out.println("=按照格式填写学生信息:(姓名;年龄;性别(0男/1女);语文;数学;英文)=");
		/*手动舒服学生的信息*/
		try
		{
			String line =br.readLine();
			System.out.println("学生信息:"+line);
			/*拆分字符串 给表格进行赋值
			 * 用;进行拆分*/
			String [] lines = line.split(";");
			if(lines.length != 6)
			{
				System.out.println("=输入的信息有误 请按照格式输入=");
				return ;
			}
			/*把用户输入的信息封装成学生属性对象*/
			Student student = new Student();
			student.setName(lines[0]);
			/*年龄是int类型需要转型*/
			student.setAge(Integer.valueOf(lines[1]));
			/*性输入 0 是男  1 是女*/
			if("0".equalsIgnoreCase(lines[2]))
			{
				student.setSex(true);
			}else if("1".equalsIgnoreCase(lines[2]))
			{
				student.setSex(false);
			}else
			{
				/*其他输入都为错误*/
				System.out.println("=输入有误请按照格式填写=");
				return ;
			}
			student.setChinese(Double.valueOf(lines[3]));
			student.setMath(Double.valueOf(lines[4]));
			student.setEnglish(Double.valueOf(lines[5]));
			
			/*时间直接取录入的时间*/
			student.setCreateTime(new Date());
			student.setUpdateTime(new Date());
			/*将学生的信息添加到容器中*/
			int id = this.stubentService.insertOneStudent(student);
			System.out.println("学生信息添加成功"+student);
		} catch (IOException e)
		{
			System.out.println("=输入的格式不正确=");
			//e.printStackTrace();
		}
	}
	/*菜单介绍
	 * 使用的说明书
	 * */
	private void help()
	{
		System.out.println("=使用说明=");
		System.out.println("1:查看所有学生");
		System.out.println("2:录入新学生");
		System.out.println("3:修改学生");
		System.out.println("4:删除学生");
		System.out.println("5:随机点名");
		System.out.println("6:保存学生信息");
		System.out.println("7:查找一个学生信");
	}

}
